package cn.xuguowen.user.designPatten.factory.heima_abstract_factory;

/**
 * ClassName: Client
 * Package: cn.xuguowen.user.designPatten.factory.heima_abstract_factory
 * Description:
 * 客户端
 * 抽象工厂的优点：当一个产品族中的多个对象被设计到一起工作时，它能保证客户端始终只使用同一个产品族中的对象。当你新增一个产品族的时候，只需要增加一个具体的工厂类即可。
 * 抽象工厂的缺点：当产品族中需要增加一个新的产品时，抽象工厂、所有的具体工厂类代码都需要进行修改。
 * 抽象工厂的使用场景：
 *  1.当需要创建的对象是一系列相互关联或相互依赖的产品族时，如电器工厂中的电视机、洗衣机、空调……
 *  2.系统中有多个产品族，但每次只使用其中的某一族产品。如你只喜欢穿耐克品牌的鞋子和衣服……
 *  3.系统重提供了产品的类库，且所有产品的接口相同，客户端不依赖产品实例的创建细节和内部结构。如输入法换皮肤，一套一起换。
 * @Author 徐国文
 * @Create 2023/4/27 14:33
 * @Version 1.0
 */
public class Client {

    public static void main(String[] args) {
        // 美式
        // AmericanFactory factory = new AmericanFactory();

        // 意式
        ItalyFactory factory = new ItalyFactory();

        Store store = new Store(factory);
        System.out.println(store.getCoffee().getName());
        System.out.println(store.getDessert().getName());
    }
}
